# @package ModulePython
# Documentation for this module
#
# More details here

import socket
import random
from netadapter import *

##
# Estoque
# criara novos produtos
#

class CriaEstoque:
    ##
    # Construtor
    # Inicializa estoque com parametros dos servidores
    # @todo
    def __init__ (self):
        print '> Inicia entidade repositora de estoque'
        self.servers = []
        self.__socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    ##
    # criaNovoProduto
    # gera produto a ser inserido nos servidores
    # o dado gerado eh o ID para o novo produto 
    #
    def criaNovoProduto (self):
        # gera valor aleatorio, que sera o identificador do produto
        id = int(1000000*random.random()) 
        return id

    ##
    # atualizaServidores
    # describe here
    # @todo
    #
    def atualizaServidores (self):
        # recebe lista de servidores e portas
        # servidor.conf: ''id:ip:tcp:udp''
        conffile = open("servidor.conf","r")
        conf = conffile.readlines()
        # inicializa lista de servidores
        for i in range (0, len(conf)):
            # adiciona cada servidor aa lista de servidores
            # debug: print conf[i].split(':')[1]
            # debug: print conf[i].split(':')[2]
            server = conf[i].split(':')[1], conf[i].split(':')[2]
            self.servers.append(server)

# inicializacoes de estoque, servidores e produto
estoque = CriaEstoque()
estoque.atualizaServidores()
adapter = NetAdapter()
id = estoque.criaNovoProduto()

# percorre os servidores da lista, conectando-se a eles,
# enviando a mensagem com ID e QTD, e desconectando.
for server in estoque.servers:
        # debug: print server
        defaulthost=server[0]
        defaultport=int(server[1])
        # debug: print defaulthost, defaultport
        adapter.conecta(defaulthost,defaultport)
        # envia mensagem para servidor com newID, opcode, qtd;
        # sendo que opcode sempre sera 'create'
        qtd =  random.randint (10,200)
        info=" create#"+str(id)+"#"+str(qtd)
        adapter.envia(info)
        adapter.desconecta()
